/*
Copyright (C) 2008 raohmaru <http://www.raohmaru.com>

This file is part of Raohmaru AS3 Framework.

Raohmaru AS3 Framework is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Raohmaru AS3 Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with Raohmaru AS3 Framework.  If not, see <http://www.gnu.org/licenses/>.
*/

package jp.raohmaru.events 
{
import flash.events.Event;

/**
 * La clase DragEvent define eventos asociados al arrastramiento de Sprites.
 * Incluyen lo siguiente:
<ul>
	<li><code>DragEvent.DRAG</code>: se distribuye cuando un usuario arrastra un sprite.</li>
	<li><code>DragEvent.DRAG_START_</code>: se distribuye cuando un usuario comienza la acción de arrastar.</li>
	<li><code>DragEvent.DRAG_STOP</code>: se distribuye cuando un usuario detiene la acción de arrastar.</li>	<li><code>DragEvent.DRAG_CHANGE</code>: se distribuye cuando se produce un cambio en la posici&oacute;n de un control deslizador o este ha dejado de arrastrarse.</li>
</ul>  
 * @see jp.raohmaru.controls.Slider 
 * @see flash.display.Sprite#startDrag()
 * @author raohmaru
 * @version 1.0
 */
public class DragEvent extends Event 
{
	/**
	 * Define el valor de la propiedad <code>type</code> para un objeto de evento <code>dragDrag</code>. 
	 */
	public static const DRAG :String = "dragDrag";
	/**
	 * Define el valor de la propiedad <code>type</code> para un objeto de evento <code>dragStart</code>. 
	 */
	public static const DRAG_START :String = "dragStart";
	/**
	 * Define el valor de la propiedad <code>type</code> para un objeto de evento <code>dragStop</code>. 
	 */
	public static const DRAG_STOP :String = "dragStop";
	/**
	 * Define el valor de la propiedad <code>type</code> para un objeto de evento <code>dragChange</code>. 
	 */
	public static const DRAG_CHANGE :String = "dragChange";
	
	private var _position :Number,
				_localX :Number,
				_localY :Number;
	
	/**
	 * Obtiene el nuevo valor de un control Slider basado en su posición.
	 */
	public function get position() :Number
	{
		return _position;
	}
	
	/**
	 * La coordenada horizontal en la que se produce el evento en relación con la clase Sprite contenida.
	 */
	public function get localX() :Number
	{
		return _localX;
	}
	
	/**
	 * La coordenada vertical en la que se produce el evento en relación con la clase Sprite contenida.
	 */
	public function get localY() :Number
	{
		return _localY;
	}


	
	/**
	 * Crea un nuevo objeto DragEvent con los parámetros especificados.
	 * @param type Tipo de evento; este valor identifica la acción que ha activado el evento.
	 * @param position Nuevo valor del deslizador.
	 * @param localX La coordenada horizontal en la que se produce el evento en relación con la clase Sprite contenida.
	 * @param localY La coordenada vertical en la que se produce el evento en relación con la clase Sprite contenida.
	 */
	public function DragEvent(type :String, position :Number, localX :Number, localY :Number)
	{
		_position = position;		_localX = localX;		_localY = localY;
		
		super(type);
	}
	
	
	/**
	 * Devuelve una cadena con todas las propiedades del objeto DragEvent.
	 * La cadena tiene el siguiente formato:
	 * 
	 * <p>[<code>DragEvent type=<em>value</em> position=<em>position</em>
	 * bubbles=<em>value</em> cancelable=<em>value</em> 
     * localX=<em>value</em> localY=<em>value</em></code>]</p>
	 *
     * @return Una representación de cadena del objeto DragEvent
	 */
	override public function toString() :String 
	{
		return formatToString("SliderEvent", "type", "position", "bubbles", "cancelable", "clickTarget");
	}

	/**
	 * Crea una copia del objeto DragEvent y define el valor de cada parámetro para que coincida con el original.
     * @return Copia de la instancia de DragEvent actual.
	 */
	override public function clone() :Event
	{
		return new DragEvent(type, _position, localX, localY);
	}
}
}
